#include "messagewidget.h"
#include "ui_messagewidget.h"
#include <QContextMenuEvent>
#include <QStyle>
#include <common/logger/logger.h>
#include <controls/contextmenu/cxicontextmenu.h>
#include <controls/messagebox/cximessagebox.h>
#include <controls/noticebox/cxinoticebox.h>
MessageWidget::MessageWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MessageWidget)
{
	ui->setupUi(this);
	_init();
}

MessageWidget::~MessageWidget()
{
	delete ui;
}
void MessageWidget::_init()
{
	// 消息框测试-information
	connect(ui->informationBtn, &QPushButton::clicked, [=]() {
		CxiMessageBox::information(this, "一二三四五一二三四五一二三四五一二三四五一二三四五一二三四五一二三四五", "wenben", false, false);
	});
	// 消息框测试-warning
	connect(ui->warnBtn, &QPushButton::clicked, [=]() {
		if (CxiMessageBox::warning(this, "信息框测试11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试这是一个信息框测试！") == CxiMessageBox::Ok)
		{
			CxiMessageBox* mymessage = new CxiMessageBox(this);         // 使用无参构造+this作为父对象
			mymessage->setWindowTitle("123456789012345678901234567890");// 设置标题
			mymessage->setShowAsIPTitle(true);
			mymessage->setIcon(CxiMessageBox::Critical);
			mymessage->setText("这是通过无参构造初始化的消息框");// 假设你添加了setText方法
			mymessage->setModal(false);
			mymessage->show();// 模态显示
		}
	});
	// 警告框测试-critical
	connect(ui->criticalBtn, &QPushButton::clicked, [=]() {
		CxiMessageBox::critical(this, "信息框测试", "这是一个信息框测试！");
	});
	// 提问框测试-question
	connect(ui->questionBtn, &QPushButton::clicked, [=]() {
		CxiMessageBox::question(this, "1", "这！", CxiMessageBox::StandardButtons(CxiMessageBox::Ok | CxiMessageBox::Cancel), false);
	});
	// 右下角通知框测试-notice
	connect(ui->noticeBoxBtn, &QPushButton::clicked, [=]() {
		NoticeData noticeData;
		noticeData.text = "这是测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打测试消息撒大苏打";// 传统赋值，兼容C++11及以上
		noticeData.caption = "这是测试消息123456789000000000000000000000000000000000000000000";
		noticeData.autoPopDelay = 30000;
		noticeData.sizeStyle = NoticeSizeStyle::Normal;
		noticeData.level = NoticeLevel::Level1;
		noticeData.type = NoticeType::Notice;
		noticeData.isConfirmBox = true;
		noticeData.confirmBtnText = "确认";
		noticeData.isMQ = true;
		noticeData.mqData = QVariant();
		noticeData.confirmCallback = [=]() {
			CxiMessageBox::information(this, "测试通知框回调函数", "通知框的确定按钮被点击了！");
		};
		noticeData.mqClickCallback = [=](const QVariant& mqData) {
			CxiMessageBox::information(this, "MQ", "MQ消息被点击了！");
		};
		CxiNoticeBox::show(noticeData);
	});
	// 右下角MQ测试-MQ
	connect(ui->noticeMQBtn, &QPushButton::clicked, [=]() {
		CxiNoticeBox::showMQ("这是一条MQ测试", [=](const QVariant& mqData) { CxiMessageBox::information(this, "测试MQ通知框回调函数", "MQ通知框的点击按钮被点击了！"); }, [=](const QVariant& mqData) { CxiMessageBox::information(this, "测试MQ通知框回调函数", "MQ通知框的双击按钮被点击了！"); });
	});
	// 左下角通知框测试-notice
	connect(ui->noticeNoticeBtn, &QPushButton::clicked, [=]() {
		CxiNoticeBox::showNotice("这是一条通知");
	});
	// 左下角通知框测试-message
	connect(ui->noticeMessageBtn, &QPushButton::clicked, [=]() {
		CxiNoticeBox::showMessage("这是一条消息！");
	});
	// 左下角通知框测试-remind
	connect(ui->noticeRemindBtn, &QPushButton::clicked, [=]() {
		CxiNoticeBox::showRemind("这是一条提醒！");
	});
	// 左下角通知框测试-warning
	connect(ui->noticeWarningBtn, &QPushButton::clicked, [=]() {
		CxiNoticeBox::showWarning("这是一条警告！");
	});
	// 左下角通知框测试-confirm
	connect(ui->confirmBtn, &QPushButton::clicked, [=]() {
		CxiNoticeBox::showConfirm("这是一个确认框测试！", [=]() {
			CxiMessageBox::information(this, "测试确认通知框回调函数", "确认通知框的确定按钮被点击了！");
		});
	});
}
void MessageWidget::menutext()
{
	CxiContextMenu* menu = new CxiContextMenu(this);
	CxiContextMenuItem* item1 = new CxiContextMenuItem(menu);
	item1->setText("复制");
	menu->addAction(item1);// 先添加复制
	CxiContextMenuItem* item2 = new CxiContextMenuItem(menu);
	item2->setText("粘贴");
	menu->addAction(item2);// 再添加粘贴
	menu->addSeparator();  // 在这里添加分隔线（位于粘贴和清除之间）
	CxiContextMenuItem* item3 = new CxiContextMenuItem(menu);
	item3->setText("清除");
	menu->addAction(item3);// 分隔线后添加清除
	CxiContextMenuItem* item4 = new CxiContextMenuItem("新建", menu);
	menu->addAction(item4);// 添加无敌
	QIcon icon = style()->standardIcon(QStyle::SP_FileIcon);
	CxiContextMenuItem* item5 = new CxiContextMenuItem(icon, "打开", menu);
	menu->addAction(item5);// 添加打开
	menu->exec(QCursor::pos());
}

void MessageWidget::contextMenuEvent(QContextMenuEvent* event)
{
	if (event->reason() == QContextMenuEvent::Mouse)
	{
		menutext();
		event->accept();
	}
	else
	{
		QWidget::contextMenuEvent(event);
	}
}